package com.atguigu.g_constructor;
/*
    结论 :
        子类要加载优先加载父类
        子类对象要加载优先加载"父类对象"
            //不是真创建了父类对象,而是创建一个虚拟的父类对象[super]

    注意事项 :
         1. super() : 启动父类的无参构造方法
         2. 每一个构造方法的默认第一句代码是 super()/super(实参)/this()/this(实参)
         3. super() 的前面不能写任何代码
         4. super() : 启动父类的无参构造方法
            super(实参) : 启动父类的有参构造方法
            this() : 启动本类的无参构造方法
            this(实参) : 启动本类的有参构造方法
         5. 当在一个构造方法内启动了其他任意一种构造方法,那么默认赠送的super()就不送了
         6. 一个类的多个构造方法内必须有一个构造方法去加载父类(super()/super(实参))

         注意 : 只有new才是创建对象
 */
public class Demo {
    public static void main(String[] args) {
        //创建子类对象
        Zi zi = new Zi(); //创建了1个真实Zi类对象 和一个虚拟Fu类对象[super]
    }
}

class Fu{
    public Fu() {
        super();
        System.out.println("父类构造执行了!");
    }

    public Fu(String name){
       this();
       System.out.println("父类的有参构造执行了!" + name);
    }
}
class Zi extends Fu{
    public Zi() {
        //调用本类的有参构造
        this(18);
        System.out.println("子类构造执行了!");
    }

    public Zi(int age) {
       super("张三");
       System.out.println("子类的有参构造执行了!" + age);
    }
}
